home *** CD-ROM | disk | FTP | other *** search
/ Ultimedia 1 / Ultimedia 1.iso / tools / animplayer / amipeg / source.lha / svideo.s < prev    next >
Encoding:
Text File  |  1994-03-03  |  8.4 KB  |  491 lines

  1. ;
  2. ; Some practical assembler utility routines. See sutils.h for corresponding C prototypes.
  3. ; These are mostly called from within video.c as most of them are kinda copy
  4. ; routines which handle cropping and adding together different-sized channels.
  5. ;
  6. ; Michael Rausch  15-2-94  23:05:00
  7. ;
  8.  
  9.     SECTION    text,CODE
  10.  
  11.     XREF    _clamp
  12.  
  13. ; ***************************************************************
  14.  
  15. ;void PMB2_reconstruct(char *dest, char *dest1, char *source, char *source1, int row_incr);
  16.  
  17.     XDEF    _PMB2_reconstruct
  18. _PMB2_reconstruct:
  19.     subq.l    #2,d0            ; (int*)   correct row_size
  20.     lsl.l    #2,d0
  21.     moveq    #7,d1
  22. pmb2_all_rows:
  23.     move.l    (a2)+,(a0)+
  24.     move.l    (a2)+,(a0)+
  25.     move.l    (a3)+,(a1)+
  26.     move.l    (a3)+,(a1)+
  27.     add.l    d0,a0
  28.     add.l    d0,a1
  29.     add.l    d0,a2
  30.     add.l    d0,a3
  31.     dbra    d1,pmb2_all_rows
  32.     rts
  33.  
  34. ; ***************************************************************
  35.  
  36. ;void PMB1_reconstruct(char *dest, char *source, int row_incr);
  37.  
  38.     XDEF    @PMB1_reconstruct
  39. @PMB1_reconstruct:
  40.     subq.l    #4,d0            ; correct row_size
  41.     lsl.l    #2,d0
  42.     moveq    #15,d1
  43. pmb1_all_rows:
  44.     move.l    (a1)+,(a0)+
  45.     move.l    (a1)+,(a0)+
  46.     move.l    (a1)+,(a0)+
  47.     move.l    (a1)+,(a0)+
  48.     add.l    d0,a0
  49.     add.l    d0,a1
  50.     dbra    d1,pmb1_all_rows
  51.     rts
  52.  
  53. ; ***************************************************************
  54.  
  55. ; void PSB4_reconstruct(char *dest, char *dest1, char *source1, char *source2, char *source1a, char *source2a, int row_size);
  56. ;
  57.  
  58.     XDEF    _PSB4_reconstruct
  59. _PSB4_reconstruct:
  60. psb4reg REG    d2-d4
  61.     movem.l    psb4reg,-(sp)
  62.  
  63.     subq.l    #8,d0            ; correct row_size
  64.  
  65.     move.l    #$fefefefe,d3
  66.  
  67.     moveq    #7,d4
  68. psb4_all_rows:
  69.  
  70.     REPT    2
  71.     move.l    (a2)+,d1
  72.     move.l    (a3)+,d2
  73.     and.l    d3,d1
  74.     and.l    d3,d2
  75.     add.l    d1,d2
  76.     roxr.l    #1,d2            ; tricky! get bit no 32 from the previous addition
  77.     move.l    d2,(a0)+        ; this one kicks ass !!!
  78.     ENDR
  79.  
  80.     REPT    2
  81.     move.l    (a5)+,d1
  82.     move.l    (a6)+,d2
  83.     and.l    d3,d1
  84.     and.l    d3,d2
  85.     add.l    d1,d2
  86.     roxr.l    #1,d2
  87.     move.l    d2,(a1)+
  88.     ENDR
  89.  
  90.     add.l    d0,a0
  91.     add.l    d0,a1
  92.     dbra    d4,psb4_all_rows
  93.  
  94.     movem.l    (sp)+,psb4reg
  95.     rts
  96.  
  97.  
  98. ; ***************************************************************
  99.  
  100. ; void PSB3_reconstruct(char *dest, char *source1, char *source2, int row_size);
  101. ;
  102.  
  103.     XDEF    _PSB3_reconstruct
  104. _PSB3_reconstruct:
  105. psb3reg REG    d2-d4
  106.     movem.l    psb3reg,-(sp)
  107.  
  108.     sub.l    #16,d0            ; correct row_size
  109.  
  110.     move.l    #$fefefefe,d3
  111.  
  112.     moveq    #15,d4
  113. psb3_all_rows:
  114.  
  115.     REPT    4
  116.     move.l    (a1)+,d1
  117.     move.l    (a2)+,d2
  118.     and.l    d3,d1
  119.     and.l    d3,d2
  120.     add.l    d1,d2
  121.     roxr.l    #1,d2            ; tricky! get bit no 32 from the previous addition
  122.     move.l    d2,(a0)+        ; this one kicks ass !!!
  123.     ENDR
  124.  
  125.     add.l    d0,a0
  126.     dbra    d4,psb3_all_rows
  127.  
  128.     movem.l    (sp)+,psb3reg
  129.     rts
  130.  
  131. ; ***************************************************************
  132.  
  133. ;void PSB2_reconstruct(char *dest, char *dest1, char *source, char *source1, int row_incr);
  134.  
  135.     XDEF    _PSB2_reconstruct
  136. _PSB2_reconstruct:
  137.     subq.l    #2,d0            ; (int*)   correct row_size
  138.     lsl.l    #2,d0
  139.     moveq    #7,d1
  140. psb2_all_rows:
  141.     move.l    (a2)+,(a0)+
  142.     move.l    (a2)+,(a0)+
  143.     move.l    (a3)+,(a1)+
  144.     move.l    (a3)+,(a1)+
  145.     add.l    d0,a0
  146.     add.l    d0,a1
  147.     dbra    d1,psb2_all_rows
  148.     rts
  149.  
  150.  
  151. ; ***************************************************************
  152.  
  153. ;void PSB1_reconstruct(char *dest, char *source, int row_incr);
  154.  
  155.     XDEF    @PSB1_reconstruct
  156. @PSB1_reconstruct:
  157.     subq.l    #4,d0            ; (int*) correct row_size
  158.     lsl.l    #2,d0
  159.     moveq    #15,d1
  160. psb1_all_rows:
  161.     move.l    (a1)+,(a0)+
  162.     move.l    (a1)+,(a0)+
  163.     move.l    (a1)+,(a0)+
  164.     move.l    (a1)+,(a0)+
  165.     add.l    d0,a0
  166.     dbra    d1,psb1_all_rows
  167.     rts
  168.  
  169. ; ***************************************************************
  170.  
  171. ; void RSB4_reconstruct(char *dest, char *source1, char *source2, int row_size);
  172. ;
  173.  
  174.     XDEF    _RSB4_reconstruct
  175. _RSB4_reconstruct:
  176. rsb4reg REG    d2-d4
  177.     movem.l    rsb4reg,-(sp)
  178.  
  179.     subq.l    #8,d0            ; correct row_size
  180.  
  181.     move.l    #$fefefefe,d3
  182.  
  183.     moveq    #7,d4
  184. rsb4_all_rows:
  185.  
  186.     REPT    2
  187.     move.l    (a1)+,d1
  188.     move.l    (a2)+,d2
  189.     and.l    d3,d1
  190.     and.l    d3,d2
  191.     add.l    d1,d2
  192.     roxr.l    #1,d2            ; tricky! get bit no 32 from the previous addition
  193.     move.l    d2,(a0)+        ; this one kicks ass !!!
  194.     ENDR
  195.  
  196.     add.l    d0,a1
  197.     add.l    d0,a2
  198.     dbra    d4,rsb4_all_rows
  199.  
  200.     movem.l    (sp)+,rsb4reg
  201.     rts
  202.  
  203.  
  204. ; ***************************************************************
  205.  
  206. ;void RSB3_reconstruct(char *dest, char *source, int row_size);
  207.  
  208.     XDEF    @RSB3_reconstruct
  209. @RSB3_reconstruct:
  210.     subq.l    #8,d0            ; correct row_size
  211.     moveq    #3,d1
  212. rsb3_all_rows:
  213.     rept    2
  214.     move.l    (a1)+,(a0)+
  215.     move.l    (a1)+,(a0)+
  216.     add.l    d0,a1
  217.     endr
  218.     dbra    d1,rsb3_all_rows
  219.     rts
  220.  
  221. ; ***************************************************************
  222.  
  223. ; void RSB2_reconstruct(char *dest, char *source1, char *source2, int row_size);
  224. ;
  225.  
  226.     XDEF    _RSB2_reconstruct
  227. _RSB2_reconstruct:
  228. rsb2reg REG    d2-d4
  229.     movem.l    rsb2reg,-(sp)
  230.  
  231.     sub.l    #16,d0            ; correct row_size
  232.  
  233.     move.l    #$fefefefe,d3
  234.  
  235.     moveq    #15,d4
  236. rsb2_all_rows:
  237.  
  238.     REPT    4
  239.     move.l    (a1)+,d1
  240.     move.l    (a2)+,d2
  241.     and.l    d3,d1
  242.     and.l    d3,d2
  243.     add.l    d1,d2
  244.     roxr.l    #1,d2            ; tricky! get bit no 32 from the previous addition
  245.     move.l    d2,(a0)+        ; this one kicks ass !!!
  246.     ENDR
  247.  
  248.     add.l    d0,a1
  249.     add.l    d0,a2
  250.     dbra    d4,rsb2_all_rows
  251.  
  252.     movem.l    (sp)+,rsb2reg
  253.     rts
  254.  
  255.  
  256. ; ***************************************************************
  257.  
  258. ;void RSB1_reconstruct(char *dest, char *source, int row_size);
  259.  
  260.     XDEF    @RSB1_reconstruct
  261. @RSB1_reconstruct:
  262.     sub.l    #16,d0            ; correct row_size
  263.     moveq    #15,d1
  264. rsb1_all_rows:
  265.     move.l    (a1)+,(a0)+
  266.     move.l    (a1)+,(a0)+
  267.     move.l    (a1)+,(a0)+
  268.     move.l    (a1)+,(a0)+
  269.     add.l    d0,a1
  270.     dbra    d1,rsb1_all_rows
  271.     rts
  272.  
  273. ; ***************************************************************
  274.  
  275. ;void BM_reconstruct(char *index, char *rindex1, int row_size);
  276.  
  277.     XDEF    @BM_reconstruct
  278. @BM_reconstruct:
  279.     subq.l    #8,d0            ; correct row_size
  280.     moveq    #3,d1
  281. bm_all_rows:
  282.     rept    2
  283.     move.l    (a1)+,(a0)+
  284.     move.l    (a1)+,(a0)+
  285.     add.l    d0,a0
  286.     add.l    d0,a1
  287.     endr
  288.     dbra    d1,bm_all_rows
  289.     rts
  290.  
  291.  
  292. ; ***************************************************************
  293.  
  294. ;void BMcm_reconstruct(char *index, char *rindex1, short *blockvals, int row_size);
  295.  
  296.  
  297.     XDEF    _BMcm_reconstruct
  298. _BMcm_reconstruct:
  299. bmcmreg REG    d2-d5/a4
  300.     movem.l    bmcmreg,-(sp)
  301.  
  302.     lea    _clamp,a4
  303.  
  304.     subq.l    #8,d0            ; correct row_size
  305.  
  306.     moveq    #7,d5
  307. bmcm_all_rows:
  308.  
  309.  
  310.     REPT    2
  311.     move.l    (a1)+,d3
  312.  
  313.     moveq    #0,d1
  314.     move.b    d3,d1
  315.  
  316.     lsr.l    #8,d3
  317.     moveq    #0,d4
  318.     move.b    d3,d4
  319.  
  320.     lsr.w    #8,d3        ; *grin evilly*  eadiz, peecee  *strut*
  321.     add.l    (a2)+,d3
  322.     move.w    d3,d2
  323.     swap    d3
  324.  
  325.     move.w    (a4,d3.w*2),d3
  326.     move.b    (a4,d2.w*2),d3
  327.     swap    d3
  328.  
  329.     add.w    (a2)+,d4
  330.     add.w    (a2)+,d1
  331.     move.w    (a4,d4.w*2),d3
  332.     move.b    (a4,d1.w*2),d3
  333.  
  334.     move.l    d3,(a0)+
  335.     ENDR
  336.  
  337.     add.l    d0,a0
  338.     add.l    d0,a1
  339.     dbra    d5,bmcm_all_rows
  340.  
  341.     movem.l    (sp)+,bmcmreg
  342.     rts
  343.  
  344.  
  345. ; ***************************************************************
  346.  
  347. ;void BIMcm_reconstruct(char *index, char *rindex1, char *bindex1, short *blockvals, int row_size);
  348.  
  349.  
  350.     XDEF    _BIMcm_reconstruct
  351. _BIMcm_reconstruct:
  352. bimcmreg REG    d2-d6/a4
  353.     movem.l    bimcmreg,-(sp)
  354.  
  355.     lea    _clamp,a4
  356.  
  357.     subq.l    #8,d0            ; correct row_size
  358.  
  359.     move.l    #$fefefefe,d4
  360.  
  361.     moveq    #7,d5
  362. bimcm_all_rows:
  363.  
  364.     REPT    2
  365.  
  366.     move.l    (a1)+,d1
  367.     move.l    (a2)+,d3
  368.     and.l    d4,d1
  369.     and.l    d4,d3
  370.     add.l    d1,d3
  371.     roxr.l    #1,d3        ; tricky! get bit #32 from the previous addition
  372.  
  373.     moveq    #0,d1
  374.     move.b    d3,d1
  375.  
  376.     lsr.l    #8,d3
  377.     moveq    #0,d6
  378.     move.b    d3,d6
  379.  
  380.     lsr.w    #8,d3        ; *grin evilly*  eadiz, peecee  *strut*
  381.     add.l    (a3)+,d3
  382.     move.w    d3,d2
  383.     swap    d3
  384.  
  385.     move.w    (a4,d3.w*2),d3
  386.     move.b    (a4,d2.w*2),d3
  387.     swap    d3
  388.  
  389.  
  390.     add.w    (a3)+,d6
  391.     add.w    (a3)+,d1
  392.     move.w    (a4,d6.w*2),d3
  393.     move.b    (a4,d1.w*2),d3
  394.  
  395.     move.l    d3,(a0)+
  396.     ENDR
  397.  
  398.     add.l    d0,a0
  399.     add.l    d0,a1
  400.     add.l    d0,a2
  401.     dbra    d5,bimcm_all_rows
  402.  
  403.     movem.l    (sp)+,bimcmreg
  404.     rts
  405.  
  406.  
  407. ; ***************************************************************
  408.  
  409. ;void BIM_reconstruct(char *index, char *rindex1, char *bindex1, int row_size);
  410. ;
  411.  
  412.     XDEF    _BIM_reconstruct
  413. _BIM_reconstruct:
  414. bimreg REG    d2-d4
  415.     movem.l    bimreg,-(sp)
  416.  
  417.     subq.l    #8,d0            ; correct row_size
  418.  
  419.     move.l    #$fefefefe,d3
  420.  
  421.     moveq    #7,d4
  422. bim_all_rows:
  423.  
  424.     REPT    2
  425.     move.l    (a1)+,d1
  426.     move.l    (a2)+,d2
  427.     and.l    d3,d1
  428.     and.l    d3,d2
  429.     add.l    d1,d2
  430.     roxr.l    #1,d2            ; tricky! get bit no 32 from the previous addition
  431.     move.l    d2,(a0)+        ; this one kicks ass !!!
  432.     ENDR
  433.  
  434.     add.l    d0,a0
  435.     add.l    d0,a1
  436.     add.l    d0,a2
  437.     dbra    d4,bim_all_rows
  438.  
  439.     movem.l    (sp)+,bimreg
  440.     rts
  441.  
  442.  
  443. ; ***************************************************************
  444.  
  445.     XDEF    @IM_reconstruct
  446. @IM_reconstruct:
  447. cdctreg REG    d2-d3/a2
  448.     movem.l    cdctreg,-(sp)
  449.  
  450.     lea    _clamp,a2
  451.  
  452.     subq.l    #8,d0            ; correct row_size
  453.  
  454.     moveq    #7,d2
  455. cdct_all_rows:
  456.  
  457.     REPT    2
  458.     move.w    (a1)+,d1
  459.     move.w    (a2,d1.w*2),d3
  460.     move.w    (a1)+,d1
  461.     move.b    (a2,d1.w*2),d3
  462.     swap    d3
  463.     move.w    (a1)+,d1
  464.     move.w    (a2,d1.w*2),d3
  465.     move.w    (a1)+,d1
  466.     move.b    (a2,d1.w*2),d3
  467.     move.l    d3,(a0)+
  468.     ENDR
  469.  
  470.     add.l    d0,a0
  471.     dbra    d2,cdct_all_rows
  472.  
  473.     movem.l    (sp)+,cdctreg
  474.     rts
  475.  
  476. ; ***************************************************************
  477.  
  478.     XDEF    @clear64words
  479. @clear64words:
  480.     moveq    #7,d0
  481. c64i:    clr.l    (a0)+
  482.     clr.l    (a0)+
  483.     clr.l    (a0)+
  484.     clr.l    (a0)+
  485.     dbra    d0,c64i
  486.     rts
  487.  
  488. ; ***************************************************************
  489.  
  490.     END
  491.